home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 22 / Cream of the Crop 22.iso / os2 / splot170.zip / OS2SPLOT.HLP < prev    next >
Text File  |  1996-10-07  |  84KB  |  2,483 lines

  1. <Product Info>
  2.  This is an integrated editor, C subset interpreter,
  3.  and scientific graphics program.
  4.  
  5.  THIS PROGRAM WAS WRITTEN BY THOMAS W. STEINER
  6.  COPYRIGHT 1992 - 1996, ALL RIGHTS RESERVED
  7.  THERE IS NO WARRANTY OF ANY KIND. USE AT YOUR OWN RISK.
  8.  THIS IS NOT FREEWARE. TO REGISTER YOUR COPY SEND $50 TO
  9.  
  10.        T.W. Steiner
  11.       2246 E. 6th Ave.
  12.      Vancouver, BC, V5N - 1R1
  13.           Canada
  14.        e-mail steiner@sfu.ca or
  15.        tsteiner@creo.bc.ca
  16.  
  17.  Registered users will be able to download
  18.  upgrades as they become available.
  19.  
  20. <Help>
  21.  Select each menu item in the help menu to get an
  22.  overview of the program capabilities. Some important
  23.  user interface details that go beyond the standard
  24.  are also discussed in the menu help item.
  25.  
  26. <Cursor Motion>
  27.  The cursor may be moved around with the following keys:
  28.  #4 -- left one space
  29.  #6 -- right one space
  30.  #8 -- up one line
  31.  #2 -- down one line
  32.  #1 -- end of line
  33.  #7 -- beginning of line
  34.  #3 -- scroll down one screen
  35.  #9 -- scroll up one screen
  36.  #T -- left one word
  37.  #V -- right one word
  38.  #X -- up five lines
  39.  #R -- down five lines
  40.  #Q -- end of file
  41.  #W -- beginning of file
  42.  #S -- end of file
  43.  #Y -- beginning of file
  44.  #q -- end of page
  45.  #w -- top of page
  46.  #s -- down half a page
  47.  #y -- up half a page
  48.  
  49. <Mouse>
  50.  The mouse may be used to position the cursor as an
  51.  alternative to using the keyboard. Click on the
  52.  desired text location. The text may be scrolled using
  53.  the scroll bars at the sides.
  54.  
  55.  All three mouse buttons are used to mark regions of
  56.  text by draging. The marking mode button assignments
  57.  are made in the editor configuration menu.
  58.  
  59.  Double clicking on a word in a regular file causes
  60.  the editor to search for this word in an *.ndx file
  61.  and if found there starts up the info viewer. This is
  62.  useful in conjuction with function reference material
  63.  from compiler vendors. The path to *.ndx files is
  64.  specified in the editor configuration menu. Once set
  65.  up this enables context sensitive help on any
  66.  recognized word in the text.
  67.  
  68.  Double clicking on a word in a readonly file causes
  69.  the editor to interpret that word as a file name and
  70.  loads that file. Integer numbers after the name if
  71.  any are interpreted as the line and column numbers
  72.  respectively. This is very convenient with the output
  73.  from a compiler invoked from the command line since
  74.  the output is added to the editor ring as a read only
  75.  file.
  76.  
  77. <Menus>
  78.  The menus function in a somewhat non-standard way.
  79.  
  80.  The standard ALT f file menu access has not been
  81.  implemented since these keys are used for direct
  82.  accelerators. However key board menu access is still
  83.  possible by using the ALT key by itself if this is
  84.  enabled in the editor configuration.
  85.  
  86.  To get help on any menu item click on it using the
  87.  right rather than the left mouse button.
  88.  
  89.  Almost every menu item has an associated accelerator
  90.  which may be mapped to any other key or keys. Note
  91.  that if the keys are remapped this mapping will
  92.  appear in the menus after restarting the editor.
  93.  
  94.  Since there are so many accelerator key definitions
  95.  the accelerators are case sensitive so look
  96.  carefully.
  97.  
  98. <Quit>
  99.  Exits from the currently displayed file. The next
  100.  file in the ring is displayed provided one exits. If
  101.  no other files are loaded the editor itself quits.
  102.  The number of loaded files is reported in the title
  103.  bar along with the current file name. If the file has
  104.  been modified a confirm dialog will be shown. To exit
  105.  from all the files and terminate the editor use the
  106.  "close" (or Alt F4) from the system menu.
  107.  
  108.  The default accelerator is Ctrl q mapped to ^Q
  109.  
  110. <Save>
  111.  The editor writes the currently displayed file to
  112.  disk using the current name and path. If a newer file
  113.  of the same name exist then a confirm dialog will be
  114.  displayed.
  115.  
  116.  The default accelerator is Ctrl w mapped to ^W
  117.  
  118. <Save As...>
  119.  The editor saves the currently displayed file to disk
  120.  using the specified name and path. A standard file
  121.  dialog is opened so that a filename can be typed or
  122.  chosen.
  123.  
  124.  The default accelerator is Ctrl W mapped to ^w
  125.  
  126. <Save All Changed>
  127.  All files loaded that have had changes made to them
  128.  are saved to disk.
  129.  
  130.  The default accelerator is Ctrl A mapped to ^a
  131.  
  132. <Open...>
  133.  A standard file dialog is displayed which allows
  134.  selection of a file to be edited. A wildcard '*' in
  135.  the name will load all matching files. Files may also
  136.  be loaded from the command line by typing
  137.  '^[ e yourfile.name'.
  138.  
  139.  The default accelerator is Ctrl O mapped to ^o
  140.  
  141. <Next>
  142.  The next file in the ring of loaded files is displayed.
  143.  
  144.  The default accelerator is Ctrl n mapped to ^N
  145.  
  146. <Prev>
  147.  The previous file in the ring of loaded files is
  148.  displayed.
  149.  
  150.  
  151.  The default accelerator is Ctrl p mapped to ^P
  152.  
  153. <Other...>
  154.  Opens a listbox dialog which displays a list of all
  155.  the files currently loaded. A file to be displayed
  156.  may be selected by double clicking on the chosen
  157.  filename. Changed files have the word changed
  158.  appended to the file name.
  159.  
  160.  The default accelerator is Ctrl H mapped to ^h
  161.  
  162. <Config...>
  163.  Opens the editor configuration notebook. Many editor
  164.  preferences such as the colours may be set. The
  165.  results are saved in the ASCII file editor.cfg so
  166.  that the next time the editor starts it will use the
  167.  selected configuration. If multiple editor instances
  168.  are started only the first one will write the
  169.  editor.cfg file.
  170.  
  171.  The default accelerator is Ctrl C  mapped to ^c
  172.  
  173. <Cmd...>
  174.  Opens a command line dialog. Commands to the
  175.  operating system as well as editor command line
  176.  commands may be entered. The listbox displays a
  177.  history of the recently used command line commands
  178.  for reuse by double clicking on them. Command line
  179.  commands may also be entered without opening this
  180.  dialog by hitting the ^[ key. The editor command line
  181.  commands are as follows:
  182.  
  183.  The default accelerator is Ctrl M  mapped to ^m
  184.  
  185.  Command Line Operations
  186.  
  187.  ^[                    goto or leave command line
  188.  
  189.  Change current line.
  190.     number                goto line number n
  191.    +number                down n lines
  192.    -number                up n lines
  193.  
  194.  Change current column offset.
  195.    @number                start at column n
  196.    @+number               scroll left n columns
  197.    @-number               scroll right n columns
  198.  
  199.  Search and Replace.
  200.    /str1[/-bclrw]
  201.       find string str (/ may instead be other punct)
  202.    c/str1/str2[/-bclrw]      replace str1 with str2
  203.  
  204.    The optional search suffixes are
  205.       /-        search up (down is the default)
  206.       /b        search marked block only
  207.       /c        ignore case
  208.       /l        loop through all loaded files
  209.       /r        interpret as regular expression
  210.       /w        match whole words only
  211.  
  212.    For regular expressions the following symbols have
  213.    special meaning:
  214.       ^ start of line
  215.       \$ end of line
  216.       . any character
  217.       \\ literal next character
  218.       + match one or more times
  219.       * match zero or more times
  220.       [aei0-9]   match a,e,i and 0 through 9
  221.       [^aei0-9]  match anything but a,e,i and 0 through 9
  222.       (  )       sub expression
  223.       a(ab)*b    matches ab aabb aababb aabababb etc.
  224.  
  225.  loading additional files to edit
  226.    e name1,name2,...[-brfl]
  227.    edit name1,name2,...[-brfl]
  228.  
  229.    The optional edit suffixes are
  230.      -b        binary mode
  231.      -r        read only
  232.      -f num    first line is line number num (-r implied)
  233.      -l num    last line is line number num (-r implied)
  234.  
  235.  cfg or configure      show and modify editor config
  236.  
  237.  help or ?             activates help
  238.  
  239.  quit                  exit without saving changes
  240.  
  241.  m [name] or           insert named file at cur location
  242.  merge [name]
  243.  
  244.  r [name]  or          rename current file to name
  245.  rename [name]
  246.  
  247.  d [name]  or          diff between current and named file
  248.  diff [name]           diff between current and named file
  249.  
  250.  up arrow              previous command line entered
  251.  down arrow            next command line entered
  252.  
  253.  fill [string]         fill B marked block with string
  254.  
  255.  sort [col]            sort lines using field col as key
  256.  
  257.  hex [num] or hex 'c'  convert decimal num or char to hex
  258.  
  259.  dec [num] or dec 'c'  convert hex num or char to decimal
  260.  
  261.  asc [num]             convert hex or dec number to char
  262.  
  263.  cd [y:\path]          set default drive and path
  264.  
  265.  os [command]          send command to operating system
  266.  [command]             sent to operating system
  267.  
  268.  The results of the above operating system calls will
  269.  end up in a temp file in the ring of files. There is
  270.  a difference between the above two methods. When a
  271.  command is prefixed by "os" the command runs
  272.  synchronously i.e. the editor is blocked until the os
  273.  command completes. If the "os" prefix is absent the
  274.  system call runs in back ground. This is useful for
  275.  compiling code or doing long searches in background
  276.  for example.
  277.  
  278.  Lastly, any string that is sent to the operating system
  279.  will first have any occurances of \$EDNAME translated to
  280.  the current filename. In this way a generic macro that
  281.  does an os call may be built.
  282.  
  283. <Delete Character>
  284.  Deletes the character under the cursor.
  285.  
  286.  The default accelerator is Ctrl d mapped to ^D
  287.  
  288. <Delete Prev Char>
  289.  Deletes the character to the left of the cursor. If
  290.  the cursor is at the start of a line it will join the
  291.  current line to the previous line.
  292.  
  293.  The default accelerator is Backspace mapped to ^H
  294.  
  295. <Delete Word>
  296.  Deletes all characters under and to the right of the
  297.  cursor up to the next space or punctuation.
  298.  
  299.  The default accelerator is Ctrl z mapped to ^Z
  300.  
  301. <Delete to Line end>
  302.  Deletes all characters under and to the right of the
  303.  cursor up to the end of the line.
  304.  
  305.  The default accelerator is Ctrl e mapped to ^E
  306.  
  307. <Delete Line>
  308.  Deletes the entire current line.
  309.  
  310.  The default accelerator is Ctrl Back mapped to ^?
  311.  
  312. <Insert New Line>
  313.  The behaviour of this command is dependent on the
  314.  'conventional return' configuration setting. If
  315.  conventional return is on then the current line is
  316.  split at the cursor and the remainder is put on the
  317.  next line. If however, conventional return is not
  318.  enabled then this command inserts a blank line below
  319.  the current line leaving the current line intact.
  320.  This behaviour is compatible with the 'e' series of
  321.  editors.
  322.  
  323.  The default accelerator is Enter mapped to ^M
  324.  
  325. <Change Char Case>
  326.  Changes the case of the character under the cursor.
  327.  
  328.  The default accelerator is Ctrl c mapped to ^C
  329.  
  330. <Swap two Chars>
  331.  Swaps the character under the cursor with the one
  332.  to the right of the cursor.
  333.  
  334.  The default accelerator is Ctrl s mapped to ^S
  335.  
  336. <Insert Ctrl Char>
  337.  This command starts a dialog for entering the 3 digit
  338.  ASCII code of a character to be inserted in the text. 
  339.  This is useful for inputing characters without a key
  340.  board key. 
  341.  
  342.  The default accelerator is Alt x mapped to %X
  343.  
  344. <Insert Literal Char>
  345.  This is only active if key mapping is turned on in
  346.  the editor configuration menu. If it is turned on
  347.  then this command will for the next key stroke
  348.  disable the translation so that the original
  349.  functionality may be accessed.
  350.  
  351.  The default accelerator is Alt k mapped to %K
  352.  
  353. <Cut Line at Cursor>
  354.  This command splits the current line at the cursor
  355.  puting the remainder of current line on the next
  356.  line. Similar to Insert New Line if conventional
  357.  return is enabled. Used to split lines if
  358.  conventional return is not enabled.
  359.  
  360.  The default accelerator is Ctrl k mapped to ^K
  361.  
  362. <Join two Lines>
  363.  This command joins the next line to the end of the
  364.  current line.
  365.  
  366.  The default accelerator is Ctrl j mapped to ^J
  367.  
  368. <Left justify line>
  369.  This command adjusts the indentation of the current
  370.  line to match that of the next non blank line above.
  371.  If a block of lines was just copied or moved this key
  372.  will adjust the indentation of the whole block.
  373.  
  374.  The default accelerator is Alt j mapped to %J
  375.  
  376. <Toggle Ins/Del>
  377.  This command toggles the character insertion mode
  378.  between insertion and replacement. The current status
  379.  is reported on the right end of the status line.
  380.  
  381.  The default accelerator is Ctrl t mapped to ^T
  382.  
  383. <Undo>
  384.  The last changes to a line or block of lines are
  385.  restored. The number of undo levels are essentially
  386.  unlimited but can be otionally disabled in the editor
  387.  configuration menu.
  388.  
  389.  The default accelerator is Ctrl u mapped to ^U
  390.  
  391. <Redo>
  392.  Steps undone with the undo command can be redone with
  393.  this command.
  394.  
  395.  The default accelerator is Ctrl r mapped to ^R
  396.  
  397. <Restore Current Line>
  398.  If the undo record for the current line is of the
  399.  line change type then the line can be restored to its
  400.  previous state using this command. The difference
  401.  between this command and undo is that this command
  402.  can restore a line in some cases without having to
  403.  undo changes made after the current line was
  404.  modified.
  405.  
  406.  The default accelerator is Alt q mapped to %Q
  407.  
  408. <Reflow>
  409.  This command has two different modes of operation. If
  410.  syntax colouring is not on then this command
  411.  reformats a paragraph of text using the margins and
  412.  indentation specified in the editor configuration
  413.  notebook. The reformating starts at the current line
  414.  and ends at the first blank line. Alternatively a
  415.  block mark may be set to specify the margins and text
  416.  to reflow.
  417.  
  418.  If syntax colouring is on then it is assumed that the
  419.  text is C code and it is reformated with smart
  420.  indentation At this point the rules are not
  421.  configurable and may not suit everyone's taste.
  422.  
  423.  The default accelerator is Alt r mapped to %R
  424.  
  425. <First Column Lines>
  426.  This command folds up the current file so that only
  427.  those lines starting in the first column are visible.
  428.  This is useful for rapidly locating functions in a
  429.  file. If the file is already folded then this command
  430.  unfolds the file around the line current line.
  431.  
  432.  The default accelerator is Ctrl v mapped to ^V
  433.  
  434. <Lines with search string>
  435.  This command folds up the current file so that only
  436.  those lines containing the last used search string
  437.  are visible. If the file is already folded then this
  438.  command unfolds the file around the line current
  439.  line.
  440.  
  441.  The default accelerator is Alt s mapped to %S
  442.  
  443. <Changed Lines>
  444.  This command folds up the current file so that only
  445.  those lines which have been modified since the last
  446.  save are visible. If the file is already folded then
  447.  this command unfolds the file around the line current
  448.  line.
  449.  
  450.  The default accelerator is Alt v mapped to %V
  451.  
  452. <Lines with placemark>
  453.  This command folds up the current file so that only
  454.  those lines which contain a placemark are visible. If
  455.  the file is already folded then this command unfolds
  456.  the file around the line current line.
  457.  
  458.  The default accelerator is Alt h mapped to %H
  459.  
  460. <Tagged foldup>
  461.  This command folds up the current file so that the
  462.  lines between the numerically greatest remaining fold
  463.  tag and the next fold tag are hidden. The fold tag is
  464.  a regular expression set in the editor configuration
  465.  dialog and should be picked to be a comment in the
  466.  language in use. For example the default regular
  467.  fold tag expression is //[ ]*L[0-9]+ which is a comment
  468.  in C++. This will match // L1 and // L21 for example.
  469.  The number represents the fold level.
  470.  
  471.  Tagged foldup is the only folding mode that requires
  472.  special entries in the file. However, a file written
  473.  with folding in mind can make use of these tags to
  474.  selectively hide details to present an overview.
  475.  
  476.  The default accelerator is Alt - mapped to %-
  477.  
  478. <Tagged unfold>
  479.  Unfolds previously folded text by one level if folded
  480.  by tagged foldup. If folded in another mode the file
  481.  is completely unfolded. The file is unfolded around the
  482.  current line.
  483.  
  484.  The default accelerator is Alt + mapped to %+
  485.  
  486. <Tabbed foldup>
  487.  This command folds up the current file so that the
  488.  most indented text which remains visible is hidden.
  489.  This provides a means of hidding the details of a
  490.  large switch() for example to get an overview.
  491.  
  492.  The default accelerator is Ctrl - mapped to ^-
  493.  
  494. <Tabbed unfold>
  495.  Unfolds previously folded text by one level if folded
  496.  by tabbed foldup. If folded in another mode the file
  497.  is completely unfolded. The file is unfolded around the
  498.  current line.
  499.  
  500.  The default accelerator is Ctrl + mapped to ^+
  501.  
  502. <Split Screen>
  503.  The screen is split into an upper and lower half each
  504.  of which can show the same or a different file. If the
  505.  screen is already split then it is unsplit.
  506.  
  507.  The default accelerator is Ctrl y mapped to ^Y
  508.  
  509. <Other Split Half>
  510.  This command is only active if the screen is split in
  511.  which case it moves the cursor to the other split half.
  512.  It is also possible to click with the mouse to select
  513.  the other half.
  514.  
  515.  The default accelerator is Ctrl o mapped to ^O.
  516.  
  517. <Alternate Binary Rep>
  518.  If the file being edited is a binary file then this command
  519.  switches from the hex representation to a text and control
  520.  key representation.
  521.  
  522.  The default accelerator is Alt a mapped to %A.
  523.  
  524. <Normal Mark>
  525.  This is the industry standard mode of text marking which
  526.  is of more use with standard text than with program code.
  527.  Use this command to mark the start and end of a region.
  528.  A region may start in the middle of a line extend over
  529.  several lines and end in the middle of a line.
  530.  
  531.  The default accelerator is Alt n mapped to %N.
  532.  
  533. <Unmark>
  534.  Unmark any text marked in any one of the three marking
  535.  modes.
  536.  
  537.  The default accelerator is Alt u mapped to %U.
  538.  
  539. <Delete region>
  540.  This deletes a region marked in any one of the three
  541.  marking modes.
  542.  
  543.  The default accelerator is Alt d mapped to %D.
  544.  
  545. <Move region>
  546.  This moves a region marked in any one of the three
  547.  marking modes to the location in the same or different
  548.  file specified by the current cursor location.
  549.  
  550.  The default accelerator is Alt m mapped to %M.
  551.  
  552. <Copy region>
  553.  This copies a region marked in any one of the three
  554.  marking modes to the location in the same or different
  555.  file specified by the current cursor location.
  556.  
  557.  The default accelerator is Alt c mapped to %C.
  558.  
  559. <Yank back last del>
  560.  The last region deleted can be restored once or many
  561.  times using this command. The last deleted text is
  562.  inserted at the current cursor location in the same
  563.  or different file. Note that the text may be brought
  564.  back in any location so that this provides a means
  565.  of moving text in a method conceptually similar to
  566.  using a clip board.
  567.  
  568.  The default accelerator is Alt y mapped to %Y.
  569.  
  570. <Write region>
  571.  The currently marked region is written to a temp
  572.  disk file with name 'editblck.tmp' in the current
  573.  directory.
  574.  
  575.  The default accelerator is Alt w mapped to %W.
  576.  
  577. <Mark lines(s)>
  578.  This is the prefered marking mode for program
  579.  text. Only whole lines are marked and line marked
  580.  text when inserted on a copy does not split the
  581.  current line as in normal marked case but inserts
  582.  the marked lines below the current line.
  583.  
  584.  The default accelerator is Alt l mapped to %L.
  585.  
  586. <Justify>
  587.  This command left adjusts the current line with the
  588.  first non-blank line above and then moves the cursor
  589.  down to the next line. As a special case if the last
  590.  operation was a marked region move or copy then the
  591.  whole block is shifted left or right as necessary
  592.  to left adjust the first line.
  593.  
  594.  The default accelerator is Alt j mapped to %J.
  595.  
  596. <Mark Rect Block>
  597.  This command is used to mark a rectangular block
  598.  for column manipulations.
  599.  
  600.  The default accelerator is Alt b mapped to %B.
  601.  
  602. <Fill Rect>
  603.  A previously marked rectangle may be filled with
  604.  a single character. To fill with a word use the
  605.  command line command 'fill xyz'. Alternatively,
  606.  this command may be used to change the case of
  607.  all the characters in the marked block. Lastly,
  608.  this command may be used to fill with a sequence
  609.  of incrementing or decrementing numbers starting
  610.  with the number found at the top of the block
  611.  marked region region.
  612.  
  613.  The default accelerator is Alt f mapped to %F.
  614.  
  615. <Overlay Block>
  616.  The block marked region is used to overwrite a
  617.  same sized region the top left corner of which
  618.  is specified by the current cursor location.
  619.  
  620.  The default accelerator is Alt o mapped to %O.
  621.  
  622. <Move Rect Left>
  623.  A block marked region may be moved to the left
  624.  by one space with this command. The contents of
  625.  the column to the left of the block is deleted.
  626.  The text to the right of the marked block moves
  627.  with the text. This command is useful for adjusting
  628.  the indentation of a section.
  629.  
  630.  The default accelerator is Alt Left mapped to #t.
  631.  
  632. <Move Rect Right>
  633.  A block marked region may be moved to the right
  634.  by one space with this command. The text to the
  635.  right of the marked block moves with the text.
  636.  This command is useful for adjusting the indentation
  637.  of a section.
  638.  
  639.  The default accelerator is Alt Right mapped to #v.
  640.  A block marked region may be shifted to the left
  641.  by one space with this command. The contents of
  642.  the left most column of the block is deleted and
  643.  the width of the block shrunk by one
  644.  The text to the right of the marked block moves
  645.  with the text. This command is useful for adjusting
  646.  the indentation of a section.
  647.  
  648.  The default accelerator is Alt Left mapped to #t.
  649.  
  650. <Move Rect Up>
  651.  A block marked region may be moved up by one line
  652.  with this command. The contents of the line above
  653.  the block is split to accomodate the block.
  654.  
  655.  The default accelerator is Alt Up mapped to #x.
  656.  
  657. <Move Rect Down>
  658.  A block marked region may be moved down by one line
  659.  with this command. The contents of the line below
  660.  the block is split to accomodate the block.
  661.  
  662.  The default accelerator is Alt Down mapped to #x.
  663.  
  664. <Shift Rect Left>
  665.  A block marked region may be shifted to the left
  666.  by one space with this command. The left most column
  667.  of the block is deleted and the marked region's width
  668.  is reduced by one provided the width of the column is
  669.  wider than one. If not the block width stays at one and
  670.  a new column is shifted in from the right. Text to the
  671.  right of the marked block shift with the text in the
  672.  block. This command is useful for adjusting
  673.  the indentation of a section.
  674.  
  675.  The default accelerator is Ctrl ^ mapped to ^^.
  676.  
  677. <Shift Rect Right>
  678.  The text in  block marked region may be shifted to the
  679.  right by one space with this command. The right most
  680.  column of the block is filled with spaces Text to the
  681.  right of the marked block shift with the text in the
  682.  block. This command is useful for adjusting
  683.  the indentation of a section.
  684.  
  685.  The default accelerator is Ctrl _ mapped to ^_.
  686.  
  687. <Copy to Clipboard>
  688.  This command copies a region marked in any one of the
  689.  three marking modes to the system clip board.
  690.  
  691.  The default accelerator is Ctrl ins mapped to #P.
  692.  
  693. <Copy From Clipbrd>
  694.  This inserts lines of text from the system clipboard
  695.  below the current line.
  696.  
  697.  The default accelerator is Shift Ins mapped to #a.
  698.  
  699. <Copy to Clip and Del>
  700.  This command copies and deleted a region marked in any
  701.  one of the three marking modes to the system clip board.
  702.  
  703.  The default accelerator is Shift Del mapped to #d.
  704.  
  705. <Toggle Placemark>
  706.  This command sets a placemark on the current line if
  707.  there is not already a placemark otherwise it removes
  708.  the place mark.
  709.  
  710.  The default accelerator is Ctrl a mapped to ^A.
  711.  
  712. <Goto Last Place>
  713.  This command moves the cursor to the next location
  714.  marked by a previously set placemark.
  715.  
  716.  The default accelerator is Ctrl l mapped to ^L.
  717.  
  718. <Clear Placemarks>
  719.  This command clears all previously set placemearks.
  720.  
  721.  The default accelerator is Alt i mapped to %I.
  722.  
  723. <Goto Last Pos>
  724.  This command returns the cursor to the line it was on
  725.  previously. This command is useful in case the cursor
  726.  was accidentally removed from the region of interest
  727.  with an uninteded search for example.
  728.  
  729.  The default accelerator is Alt p mapped to %P.
  730.  
  731. <Match Bracket>
  732.  This command moves the cursor to the location matching
  733.  the bracket or comment start underneath the cursor.
  734.  Note that the cursor must currently be positoned on a
  735.  bracket or comment delimiter.
  736.  
  737.  The default accelerator is Ctrl b mapped to ^B.
  738.  
  739. <Goto Line num>
  740.  This command opens a dialog for entering the line number
  741.  of the desired current line. There is also a command
  742.  line equivalent which is:
  743.  
  744.  ^[ nnn Enter
  745.  
  746. <Teach Macro (start,end)>
  747.  This command starts or ends the recording of keystrokes
  748.  for a macro. At the end of macro recording it may be
  749.  optionally bound to a function key for preservation
  750.  between editing sessions. Otherwise it will be stored
  751.  for re-execution with the Exec Last Macro command until
  752.  the end of the current editing session unless over
  753.  written by another recorded macro.
  754.  
  755.  Macros can be used together with command multiplication
  756.  to carry out repetitive complex editing tasks.
  757.  
  758.  The default accelerator is Alt t mapped to %T.
  759.  
  760. <Exec Last Macro>
  761.  This command executes the last recorded macro. Bound
  762.  macros are executed by hitting the corresponding
  763.  function key.
  764.  
  765.  The default accelerator is Alt e mapped to %E.
  766.  
  767. <Zero Cmnd Mult>
  768.  This command is used re set a previously entered
  769.  command multiplier to zero,
  770.  
  771.  The default accelerator is Alt z mapped to %Z.
  772.  
  773. <Cmnd Multiplier>
  774.  This command opens a dialog to enter a command multiplier.
  775.  Command multiplication is very useful in conjuction with
  776.  recorded macros for executing complex repetitive editing
  777.  tasks. The default accelerators are:
  778.  
  779.  Alt 0 to Alt 9 mapped to %0 to %9.
  780.  
  781. <Find...>
  782.  This command opens the search dialog used to enter the
  783.  search string and search options. Search options are:
  784.  
  785.      search up (down is the default)
  786.      search marked block only
  787.      ignore case
  788.      loop through all loaded files
  789.      interpret as regular expression
  790.      match whole words only
  791.  
  792.  For regular expressions the following symbols have
  793.  special meaning:
  794.  
  795.       ^ start of line
  796.       \$ end of line
  797.       . any character
  798.       \\ literal next character
  799.       + match one or more times
  800.       * match zero or more times
  801.       [aei0-9]   match a,e,i and 0 through 9
  802.       [^aei0-9]  match anything but a,e,i and 0 through 9
  803.       (  )       sub expression
  804.       a(ab)*b    matches ab aabb aababb aabababb etc.
  805.  
  806.  The default accelerator is CTRL S mapped to ^s.
  807.  
  808. <Replace...>
  809.  This command opens the search and replace dialog used to
  810.  enter the search and replace strings as well as the
  811.  search options. Search options are:
  812.  
  813.      search up (down is the default)
  814.      search marked block only
  815.      ignore case
  816.      loop through all loaded files
  817.      interpret as regular expression
  818.      match whole words only
  819.  
  820.  For regular expressions the following symbols have
  821.  special meaning:
  822.  
  823.       ^ start of line
  824.       \$ end of line
  825.       . any character
  826.       \\ literal next character
  827.       + match one or more times
  828.       * match zero or more times
  829.       [aei0-9]   match a,e,i and 0 through 9
  830.       [^aei0-9]  match anything but a,e,i and 0 through 9
  831.       (  )       sub expression
  832.       a(ab)*b    matches ab aabb aababb aabababb etc.
  833.  
  834.  The default accelerator is CTRL R mapped to ^r.
  835.  
  836. <Find Next>
  837.  This command uses the last set search string and option
  838.  to find the next match.
  839.  
  840.  The default accelerator is CTRL f mapped to ^F.
  841.  
  842. <Change Dir & Find>
  843.  This command uses the last set search string and option
  844.  to find the next match after toggling the current
  845.  search direction
  846.  
  847.  The default accelerator is CTRL F mapped to ^f.
  848.  
  849. <Find Next cur word>
  850.  This command uses the word under the cursor as the
  851.  temporary search string and finds the next such match.
  852.  
  853.  The default accelerator is Alt * mapped to %*.
  854.  
  855. <Find Prev cur word>
  856.  This command uses the word under the cursor as the
  857.  temporary search string and finds the previous such
  858.  match.
  859.  
  860.  The default accelerator is Alt / mapped to %/.
  861.  
  862.  
  863. <general>
  864.     To plot a figure load a .spt file.
  865.  For example:
  866.  
  867.  <esc> edit demo\logaxes.spt or use the 'Open'
  868.  button in the 'File' menu.
  869.  
  870.  then hit CTRL G or 'Execute' button.
  871.  
  872.     The next section explains how to use the mouse. For
  873.  help with the editor select help in the editor window.
  874.  
  875.  Using The Mouse
  876.  
  877.     Double clicking the left mouse button with the mouse on
  878.  the drawing page inserts the current x,y coordinates into
  879.  the text file at the current text cursor location. If the
  880.  mouse cursor is in the text region then hitting the left 
  881.  mouse button will move the current text cursor to the mouse 
  882.  cursor location. The left mouse button is also used to 
  883.  select items in drop down menus. A rubber band box is drawn
  884.  by pressing the left mouse button with the mouse over the 
  885.  plot window and dragging the mouse with the left button held 
  886.  down. The second point of the box is set to the location at
  887.  which the button is released. Double clicking the left mouse 
  888.  button in the text window results in an action depending on
  889.  the type of file and type of word under the mouse cursor. 
  890.  If the word under the cursor is a variable the value of the 
  891.  variable or constant is displayed. If the word is a 
  892.  function then the help screen for that function will be 
  893.  loaded. If the current file has a read only attribute then 
  894.  the editor attempts to interpret the word under the cursor 
  895.  as a file name and subsequently load in that file.
  896.  
  897.     The right mouse button is used for highlighting 
  898.  elements of a drawing. If the mouse cursor is on top of a 
  899.  displayed element on the drawing page and the right mouse
  900.  button is hit then the corresponding element is highlighted 
  901.  in intense white and the text cursor jumps to the 
  902.  corresponding line in the text that generated that element. 
  903.  Conversely, if the mouse cursor is on the text side hitting
  904.  the right mouse button will highlight any graphics elements 
  905.  generated by the line under the mouse cursor. This feature 
  906.  is very useful for finding the code associated with a
  907.  particular element of a drawing or the reverse. Clicking the 
  908.  right mouse button on a drop down menu item will open a
  909.  help window for that item if available. 
  910.  
  911.     When the mouse cursor is on the drawing page the
  912.  current coordinates are printed at the bottom. The units 
  913.  and origin used are those in effect at the end of the last
  914.  program execution. The default units are cm with the origin 
  915.  in the bottom left corner of the page. Pressing the middle 
  916.  mouse button (or both the left and right mouse buttons 
  917.  together on two button mice) with the mouse pointer on the 
  918.  drawing page causes the current coordinate reference point 
  919.  to be reset so that the current coordinate line
  920.  subsequently reports the distance from this point. 
  921.  
  922.  In the editor window the mouse can also be used to mark a
  923.  region. Three types of regions are available and can be
  924.  assigned to any one of three mouse buttons as set up in the
  925.  "config" notebook of the "file" menu. 
  926.  
  927.  
  928.  
  929.     Actions associated with the menu buttons 
  930.  
  931.     There are several menu buttons along the top of the 
  932.  display. The action of these buttons is as follows. 
  933.  Starting at the left top there are four buttons labelled 
  934.  'Draw', 'Slib', 'Cnst', 'SetO' and 'Keyw'. These activate 
  935.  drop down menus which allow a function to be selected and 
  936.  inserted into the text. The 'Draw' functions are a suite of 
  937.  drawing routines which cause lines, arcs, text etc. to be 
  938.  drawn to the page. The 'SetO' menu is a list of textual
  939.  names for numerical constants which are used in conjunction
  940.  with the set(); command to change attributes of the current 
  941.  graphics state such as the current colour, line width, line 
  942.  style, axes type, etc. Choosing set from the list of 
  943.  drawing functions automatically opens a menu with only an
  944.  appropriate subset of these and is the recommended 
  945.  approach. The 'Slib' button allows selection of a standard 
  946.  C library function. Most of these are math functions such
  947.  as sin() and will not be required for making ordinary 
  948.  plots. They are however useful for manipulating data before 
  949.  plotting or generating data mathematically all from within 
  950.  Splot. The 'Cnst' button opens a menu containing all the 
  951.  constants defined in splot.h. The last button of this group 
  952.  'KeyW' opens a list of C keywords for selection. The only 
  953.  one of these that is of interest for ordinary plots is 
  954.  'main'. Every file that generates a plot or drawing must 
  955.  start with 
  956.  
  957. #include splot.h
  958. main
  959.    {
  960.    /* list of drawing commands go here */ 
  961.    /*   between the braces on as many*/
  962.    /* lines as necessary */
  963.    }
  964.  
  965.     This is all automatically inserted in the text by 
  966.  selecting 'main'. The remaining keywords in this list are
  967.  only of interest when constructing loops or branches. 
  968.  
  969.     The next button labelled 'Misc' opens a sub menu 
  970.  containing the options 'Reset', 'Redraw' , 'Coord Match' 
  971.  and 'Relative Coord'. 'Reset' resets splot to its initial 
  972.  state and erases the current drawing. The 'Redraw' button 
  973.  can be useful if Splot is in the incremental draw mode in 
  974.  order to fix up blemishes caused by out of order drawing ad 
  975.  erasing. 'Redraw' just re draws the current plot. The button
  976.  'Coord Match' toggles the current units from cm to units 
  977.  matching those defined in the last axes_box() and back. The 
  978.  button 'Relative Coord' toggles the coordinate display from 
  979.  reporting the absolute coordinate to reporting the distance
  980.  between the mouse position and the current point defined 
  981.  using the middle mouse button or double clicking the left 
  982.  mouse button over the plot window. 
  983.  
  984.     The next button along the top is concerned with
  985.  displaying the drawing. The default size of the drawing is
  986.  one which fits on a standard 8 x 11 inch piece of paper if
  987.  printed. However, as the screen resolution is not as good
  988.  as that of printers it is possible to zoom in on part of a
  989.  drawing in order to get a better view. To zoom in on part
  990.  of a drawing hold down the left button and drag the mouse
  991.  to enclose the region of interest. Then select the zoom
  992.  button and pick the drop down menu item 'Box Zoom'. The
  993.  button 'Undo Zoom' restores the previous view. The buttons
  994.  'Save View' and 'Rest View' allow interesting views to be
  995.  saved on a stack and restored respectively.
  996.  
  997. <abs>
  998.  int abs(int i);
  999.  
  1000.  Returns the absolute value of i;
  1001.  
  1002. <acos>
  1003.  double acos(double x);
  1004.  
  1005.  Returns the arc cosine of the value x. x must be 
  1006.  between -1 and 1. Returns a value between 0 and pi.
  1007.  
  1008. <arraydim>
  1009.  int arraydim(void *array,int i);
  1010.  
  1011.  Returns the number of elements in the ith dimension
  1012.  of the array. Returns -1 if it is not an array or if
  1013.  i is greater than the number of dimensions of the array.
  1014.  Dimension counting starts at 0. The second parameter is
  1015.  optional and if omitted the function returns the
  1016.  dimensions of the array.
  1017.  This is not a standard C library function.
  1018.  
  1019. <arraydup>
  1020.  void *arraydup(void *array);
  1021.  
  1022.  Returns a pointer to a duplicate of the array.
  1023.  Memory is malloced for the new array and the values
  1024.  in the old array copied to the new one.
  1025.  This is not a standard C library function.
  1026.  
  1027. <asin>
  1028.  double asin(double x);
  1029.  
  1030.  Returns the arc sine of the value x. x must be between
  1031.  -1 and 1. Returns a value between -pi/2 and pi/2. 
  1032.  
  1033. <atan>
  1034.  double atan(double x);
  1035.  
  1036.  Returns the arc tangent of the value x. Returns a value 
  1037.  between -pi/2 and pi/2. 
  1038.  
  1039. <atan2>
  1040.  double atan2(double y,double x);
  1041.  
  1042.  Returns the arc tangent of the value y/x. Returns a value 
  1043.  between -pi and pi. 
  1044.  
  1045. <atoi>
  1046.  int atoi(char *str);
  1047.  
  1048.  Converts a string to an integer. The string must contain 
  1049.  only digits. 
  1050.  
  1051. <atof>
  1052.  double atof(char *str);
  1053.  
  1054.  Converts a string to a double. The string must contain only 
  1055.  digits and 'e', 'E', '.', '-' and '+' . 
  1056.  
  1057. <ceil>
  1058.  double ceil(double x);
  1059.  
  1060.  Rounds up x to nearest integer value. 
  1061.  
  1062. <cos>
  1063.  double cos(double x);
  1064.  
  1065.  Returns the cosine of x. x is specified in radians.
  1066.  
  1067. <ctime>
  1068.  char *ctime(int tim);
  1069.  
  1070.  Returns a pointer to an ASCII string containing the
  1071.  current date and time. The passed parameter should
  1072.  be the value returned by the time() function for
  1073.  the current time and date.
  1074.  
  1075.  example:
  1076.  
  1077.  puts(ctime(time()));
  1078.  
  1079.  
  1080. <exit>
  1081.  void exit(int status);
  1082.  
  1083.  Terminates the execution of the program. If the status is 0 
  1084.  then it will be considered a normal exit otherwise an error 
  1085.  induced exit. 
  1086.  
  1087. <exp>
  1088.  double exp(double x);
  1089.  
  1090.  Calculates the exponential function e^x. 
  1091.  
  1092. <fabs>
  1093.  double fabs(double x); 
  1094.  
  1095.  Returns the absolute value of x. It is like abs() but works 
  1096.  with floating point numbers rather than integers. 
  1097.  
  1098. <floor>
  1099.  double floor(double x);
  1100.  
  1101.  Rounds down x to the nearest integer. 
  1102.  
  1103. <fmod>
  1104.  double fmod(double x,double y);
  1105.  
  1106.  Returns the remainder of x/y. 
  1107.  
  1108. <free>
  1109.  void free(char *ptr);
  1110.  
  1111.  Frees the block of memory pointed to by ptr. The memory 
  1112.  must have been previously allocated using malloc().
  1113.  
  1114. <log>
  1115.  double log(double x);
  1116.  
  1117.  Returns the natural log of x. 
  1118.  
  1119. <log10>
  1120.  double log10(double x);
  1121.  
  1122.  Returns the log base 10 of x.
  1123.  
  1124. <malloc>
  1125.  char *malloc(int size);
  1126.  
  1127.  Allocates a block of memory of size bytes and returns a
  1128.  pointer to the block. malloc returns NULL if there is
  1129.  insufficient free memory.
  1130.  
  1131. <max>
  1132.  double max{double x,double y);
  1133.  
  1134.  Returns the larger of x or y. This is NOT a standard
  1135.  C library function.
  1136.  
  1137. <min>
  1138.  double min{double x,double y);
  1139.  
  1140.  Returns the smaller of x or y. This is NOT a standard
  1141.  C library function.
  1142.  
  1143. <pow>
  1144.  double pow(double x,double y);
  1145.  
  1146.  Calculates x to the power y.
  1147.  
  1148. <puts>
  1149.  int puts(char *str);
  1150.  
  1151.  This routine writes the string str to the output file and 
  1152.  starts a new line. 
  1153.  
  1154. <printf>
  1155.  int printf(char *format,...);
  1156.  
  1157.  Prints the formatted data to the output file. The format 
  1158.  string specifies the type and number of values to print.
  1159.  Some common examples include: 
  1160.  
  1161.  printf("i = %d",i); prints the 
  1162.  integer value i. 
  1163.  
  1164.  printf("x = %g",x); prints the 
  1165.  floating point value x. 
  1166.  
  1167.  printf("text = %s",str); prints the 
  1168.  string str. 
  1169.  
  1170.  Multiple values can be printed as in 
  1171.  printf("%d %d %g %s",i,j,x,str); 
  1172.  
  1173.  The format specifiers can also include field width 
  1174.  information and justification etc. Consult a standard C
  1175.  text for more details. 
  1176.  
  1177. <print>
  1178.  void print(v,...);
  1179.  
  1180.  Prints the value v which can be of any scalar type. i.e
  1181.  int, char, float, double or a pointer. This is not a
  1182.  function found in the standard C library.
  1183.  
  1184. <rand>
  1185.  int rand();
  1186.  
  1187.  Returns random number between 0 and
  1188.  0x7FFF. Reseed using srand();
  1189.  
  1190. <sin>
  1191.  double sin(double x);
  1192.  
  1193.  Returns the sine of x. x must be specified in radians.
  1194.  
  1195. <sqrt>
  1196.  double sqrt(double x);
  1197.  
  1198.  Calculates the square root of x. x must be a positive
  1199.  number.
  1200.  
  1201. <srand>
  1202.  void srand(int seed);
  1203.  
  1204.  Reseeds the random number generator.
  1205.  Implicitly started with a seed of 1.
  1206.  
  1207. <sizeof>
  1208.  int sizeof(t);
  1209.  
  1210.  Returns the number of bytes required to store the value of
  1211.  type t.
  1212.  
  1213. <sprintf>
  1214.  int sprintf(char str,char
  1215.      *format,...); 
  1216.  
  1217.  Prints the formatted data to the string str. The format 
  1218.  string specifies the type and number of values to print.
  1219.  Some common examples include: 
  1220.  
  1221.  printf("i = %d",i); prints the 
  1222.  integer value i. 
  1223.  
  1224.  printf("x = %g",x); prints the 
  1225.  floating point value x. 
  1226.  
  1227.  printf("text = %s",str); prints the 
  1228.  string str. 
  1229.  
  1230.  Multiple values can be printed as in 
  1231.  printf("%d %d %g %s",i,j,x,str); 
  1232.  
  1233.  The format specifiers can also include field width 
  1234.  information and justification etc. Consult a standard C
  1235.  text for more details. 
  1236.  
  1237. <strcat>
  1238.  void strcat(char *dest, char 
  1239.       *source); 
  1240.  
  1241.  Concatenates the string source to the string dest. 
  1242.  
  1243. <strcpy>
  1244.  void strcpy(char *dest, char
  1245.       *source);
  1246.  
  1247.  Copies the string source to the string dest.
  1248.  
  1249. <strcmp>
  1250.  int strcmp(char *s1, char *s2);
  1251.  
  1252.  Compares the string s1 to the string s2.
  1253.  Returns < 0 if s1 is lexically < s2
  1254.  returns   0 if s1 equals s2
  1255.  Returns > 0 if s1 is lexically > s2
  1256.  
  1257. <strlen>
  1258.  int strlen(char *str);
  1259.  
  1260.  Returns the length of the string str.
  1261.  
  1262. <tan>
  1263.  double tan(double x);
  1264.  
  1265.  Calculates the value of the tangent of x. x should be
  1266.  specified in radians.
  1267.  
  1268. <time>
  1269.  int time();
  1270.  
  1271.  Returns the number of seconds elapsed since 00:00:00
  1272.  GMT January 1, 1970. Similar to the standard C library
  1273.  function time() but does not take a parameter.
  1274.  Generally used in conjunction with ctime();
  1275.  
  1276. <abox>
  1277.  void abox(double xsi, double
  1278.        ysi, double xorig,
  1279.        double yorig);
  1280.  
  1281.  Adds an axes box to the current path. The box is drawn with
  1282.  a size of xsi by ysi and centered on the page. No internal
  1283.  coordinate system is set up. Use ascale() for this or use
  1284.  axes_box() to combine both functions. All the parameters
  1285.  are optional and if present, specify the box size and
  1286.  position of the axes origin relative to the page origin. For
  1287.  the last two parameters the special constants XCENTER and
  1288.  YCENTER can be used for the x or y position coordinate
  1289.  respectively and will cause the axes box to be centered on
  1290.  the page along that axis. Using both XCENTER and YCENTER is
  1291.  equivalent to the default behaviour with the last two
  1292.  parameters absent. If no parameters are specified a default
  1293.  size of 12 by 16 cm is used and the box centered on the page.
  1294.  abox() is implicitly stroked.
  1295.  
  1296. <alineto>
  1297.  void alineto(double len, double ang);
  1298.  
  1299.  Adds a line of length len at an angle of ang with respect
  1300.  to the previous line to the current path. Generates an
  1301.  error if there is no current point. If there is no
  1302.  previous line then a horizontal line ending at the
  1303.  current point is assumed. The angle is in degrees and is
  1304.  the angle between an imaginary extension to the previous
  1305.  line and the current line.
  1306.  
  1307.  
  1308. <arc>
  1309.  void arc(double xcen, double ycen, double rad, double 
  1310.        alpha, double beta); 
  1311.   
  1312.  Adds a circular arc of radius rad centered at (xcen, ycen) 
  1313.  to the current path. The starting angle is alpha and the 
  1314.  stopping angle is beta. The arc is drawn in the counter 
  1315.  clockwise direction. A straight line section will be added 
  1316.  from the previous current point if any to the starting 
  1317.  point of the arc. 
  1318.   
  1319. <arcn>
  1320.  void arcn(double xcen, double ycen, double rad, double 
  1321.        alpha, double beta); 
  1322.   
  1323.  Adds a circular arc of radius rad centered at (xcen, ycen) 
  1324.  to the current path. The starting angle is alpha and the 
  1325.  stopping angle is beta. The arc is drawn in the clockwise 
  1326.  direction. A straight line section will be added from the 
  1327.  previous current point if any to the starting point of the 
  1328.  arc. Exactly as arc() but draws the arc in the opposite 
  1329.  direction. 
  1330.   
  1331. <arcto>
  1332.  void arcto(double x1, double y1, double x2, double y2, 
  1333.         double rad); 
  1334.   
  1335.  Adds a circular arc of radius rad to the current path. The 
  1336.  center and angles are chosen so that the arc is tangent to 
  1337.  the line formed by (x1,y1) and the current point at its 
  1338.  start and tangent to the line (x1,y1) - (x2,y2) at its end 
  1339.  point. A straight line segment is added from the current 
  1340.  point to the start of the arc. An error is generated is 
  1341.  there is no current point. 
  1342.   
  1343. <arrowto> 
  1344.  void arrowto(double x,double y,...); 
  1345.   
  1346.  Adds a line segment to the current path from the current 
  1347.  point to (x,y). The line is terminated by drawing an arrow 
  1348.  head oriented in the direction of the line. More than one 
  1349.  coordinate point can be specified in the command in which 
  1350.  case a series of line segments terminated by arrows 
  1351.  connecting the points will be added to the current path. If 
  1352.  there is no current point then an error will be generated. 
  1353.  The size of the arrow head may be changed with the 
  1354.  set(FONTWIDTH,...); command.
  1355.   
  1356. <ascale>
  1357.  void ascale(int axes, double xstart, double ystart, double 
  1358.       xend, double yend); 
  1359.  
  1360.   or
  1361.  
  1362.  void ascale(int axes, double *data, int col,...); 
  1363.  
  1364.  An internal coordinate system is set up for subsequent 
  1365.  plotting of data within the existing axes box. The x axis 
  1366.  start and stop values are xstart and xend respectively and 
  1367.  ystart, yend for the y axis. for the y axis. If the axis 
  1368.  choice is XAXES or YAXES rather than XYAXES then only two 
  1369.  numbers follow the axes specifier rather than four. This 
  1370.  allows the x and y axes scales to be set independently of 
  1371.  each other. The alternate format allows for auto scaling to 
  1372.  the specified data. There can be more than one data array 
  1373.  in the list in which case the scales are chosen so that 
  1374.  they will all fit. Each data array can optionally be 
  1375.  followed by one or two integers specifying which columns to 
  1376.  use for the x and y values. If axes is not XYAXES only one 
  1377.  integer is allowed. 
  1378.   
  1379. <axes_box>
  1380.  void axes_box(double xsi, double ysi, double xstart, double 
  1381.        ystart, double xend, double yend,double xorig, double 
  1382.        yorig); 
  1383.   
  1384.  Adds an axes box to the current path. The box is drawn with 
  1385.  a size of xsi by ysi and centered on the page. An internal 
  1386.  coordinate system is set up for subsequent plotting of data 
  1387.  within the box. The x axis start and stop values are xstart 
  1388.  and xend respectively and ystart, yend for the y axis. for 
  1389.  the y axis. The last two parameters are optional and if 
  1390.  present specify the position of the axes origin relative to 
  1391.  the page origin. For the last two parameters the special 
  1392.  constants XCENTER and YCENTER can be used for the x or y 
  1393.  position coordinate respectively and will cause the axes 
  1394.  box to be centered on the page along that axis. Using both 
  1395.  XCENTER and YCENTER is equivalent to the default behaviour 
  1396.  with the last two parameters absent. More flexibility is 
  1397.  provided by the pair of functions abox() and ascale() which 
  1398.  provide the functionality of axes_box() in several steps. 
  1399.  axes_box() is implicitly stroked.
  1400.   
  1401. <box>
  1402.  void box(double x1, double y1, double x2, double y2); 
  1403.   
  1404.  Adds a box to the current path. The two end points of the 
  1405.  box are (x1,y1) and (x2,y2); 
  1406.   
  1407. <clear>
  1408.  void clear();
  1409.   
  1410.  Clears the screen when the program is executed. Also  
  1411.  the list of drawable elements is deleted.
  1412.  This function should not be needed for ordinary plots. 
  1413.   
  1414. <clip>
  1415.  void clip()
  1416.   
  1417.  Converts the currently defined path into a clipping path. 
  1418.  All subsequent drawing operations are then clipped against 
  1419.  this path and only portions of the drawing on the inside of 
  1420.  the clip path are displayed. What is inside and what is 
  1421.  outside depends on whether even-odd or non-zero wind has 
  1422.  been selected as the fill rule using a set(); If the 
  1423.  current path is not closed then the current path is first 
  1424.  closed. If there is no current path an error is generated. 
  1425.  Clip() is implicitly stroked and takes effect immediately.
  1426.   
  1427. <closepath>
  1428.  void closepath(); 
  1429.   
  1430.  Closes the current path. A straight line segment is added 
  1431.  from the current point to the start of the current path as 
  1432.  set by the moveto() of rmoveto() command at the beginning 
  1433.  of the path definition. Generates an error if there is no 
  1434.  current point. 
  1435.  
  1436. <cmatch>
  1437.  void cmatch(int on);
  1438.  
  1439.  If the passed parameter is TRUE then it does the necessary 
  1440.  translations and scaling so that the coordinate system for 
  1441.  the page matches that used within the axes_box. An error is 
  1442.  generated if there is no current axes_box. The font scale 
  1443.  is compensated automatically for the change in coordinate 
  1444.  system so that characters will still be the same size as 
  1445.  before. If the parameter is FALSE then the previous 
  1446.  unmatched coordinates will be restored. If there is no 
  1447.  parameter TRUE is assumed. 
  1448.  
  1449. <curveto>
  1450.  void curveto(double x1, double y1, double x2, double y2, 
  1451.           double x3, double y3); 
  1452.  or
  1453.  void curveto(double *array,int first,int last);
  1454.  or
  1455.  void curveto(double *array);
  1456.   
  1457.  Adds Bezier curve sections to the current path starting 
  1458.  at the current point. The curve starts tangent to 
  1459.  (xcur,ycur) - (x1,x2) and ends tangential to (x2,y2) - 
  1460.  (x3,y3) at (x3,y3); An error is generated if there is no 
  1461.  current point. The number of coordinate points must be 
  1462.  a multiple of three else an error is generated.
  1463.  Several formats are allowed. The first is a list 
  1464.  of coordinate pairs. The second format is a pointer to a 2D 
  1465.  array of coordinate pairs followed by an optional pair of 
  1466.  integers specifying the first and last pairs to be plotted. 
  1467.   
  1468. <drawdata>
  1469.  void drawdata(double *data, int xcol, int ycol,...);
  1470.  
  1471.  Draws the data contained in the array data in the current
  1472.  axes_box. The numbers xcol and ycol are the columns of the
  1473.  array data that are to be used for the x-axis and y-axis
  1474.  data respectively. Each row of the array data represents
  1475.  one coordinate point to be plotted. The values will be
  1476.  plotted using the internal coordinate system established by
  1477.  the the call to axes_box. If there is no current axes box
  1478.  an error will be generated. The xcol and ycol params are
  1479.  optional. If no values are given then xcol = 0 and ycol = 1
  1480.  are assumed. For the popular case of one column of x values
  1481.  and a set of y values the whole set may be plotted using
  1482.  plotdata(data,xcol,ALL_Y);. drawdata() is implicitly stroked.
  1483.  More than one data set with corresponding xcol and ycol may
  1484.  be specified.
  1485.  
  1486. <errorbars>
  1487.  void errorbars(int axes,double *data, int xcol, int ycol, 
  1488.         int errcol); 
  1489.  
  1490.  Draws error bars for the data points in the array "data". 
  1491.  The first parameter is either XVALS or YVALS indicating 
  1492.  along which axes the error bars are to be drawn. The 
  1493.  numbers xcol and ycol are the columns of the array data 
  1494.  that are to be used for the x-axis and y-axis data 
  1495.  respectively. Each row of the array data represents one 
  1496.  coordinate point to be plotted. The values will be plotted 
  1497.  using the internal coordinate system established by the the 
  1498.  call to axes_box. The last parameter "errcol" is the column 
  1499.  of the array "data" which holds the size of the error for 
  1500.  the corresponding data point in the same row. If there is 
  1501.  no current axes box an error will be generated. 
  1502.  errorbars() is implicitly stroked.
  1503.  
  1504. <epsfile>
  1505.  void epsfile(char *filename);
  1506.  
  1507.  Writes the current graphics image to a file with the
  1508.  given name. The output format is encapsulated postscript.  
  1509.  Such a file can be printed on a postscript printer or 
  1510.  included as a graphic in many other programs. Warning! This
  1511.  command does not check if it is over writting an existing
  1512.  file.
  1513.   
  1514. <fill>
  1515.  void fill(); 
  1516.    
  1517.  Closes the current path if not already closed and fills the 
  1518.  interior region with the current colour as specified by the 
  1519.  last set() call. What is inside and what is outside the 
  1520.  path depends on the currently chosen fill rule. The fill 
  1521.  rule is either even-odd or non-zero wind (the default) and
  1522.  is specified using a set() call. An error is generated if
  1523.  there is no current path.
  1524.  
  1525. <fft>
  1526.  void fft(double *data, int rcol, int icol, char inv>
  1527.  
  1528.  Does a fast Fourier transform of the data. The last
  1529.  parameter is optional and if TRUE the inverse
  1530.  transform is done. The rcol parameter specifies the
  1531.  column of data which is the real part while icol is
  1532.  the column of data which is the imaginary part. To do
  1533.  a transform of a real function just arrange to have a
  1534.  column of zeros in your data. Note that the number of
  1535.  rows in the data set must be a multiple of 2. If not
  1536.  add rows to pad.
  1537.  
  1538. <fitline>
  1539.  void fitline(double *data, int xcol, 
  1540.   int ycol,double *yint,double *slope);
  1541.  
  1542.  Fits the best straight line to the data in the array "data" 
  1543.  using the column xcol of the array as the x values and the 
  1544.  column ycol as the corresponding y values. The best line is 
  1545.  drawn constrained to the current axes box. If there is no
  1546.  current axes box an error is generated. The last two 
  1547.  parameters are the returned values giving the y intercept 
  1548.  and slope of the fitted line. Note that they are pointers 
  1549.  to doubles which must be declared at the top of the 
  1550.  program. Given a declaration of the form: 
  1551.   
  1552.      double slope,yint;
  1553.  
  1554.  Call fitline using:
  1555.  
  1556.      fitline(data,0,1,&yint,&slope);
  1557.  
  1558.  Assuming that the first and second column of data are the x 
  1559.  and y values respectively. Data points can be excluded from 
  1560.  the fit by using the set(XRANGE,xmin,xmax); or 
  1561.  set(YRANGE,ymin,ymax); commands. Only data points within 
  1562.  the limits will be used for the fit. fitline() is 
  1563.  implicitly stroked.
  1564.   
  1565. <get>
  1566.  int or double get(int option, char *str); 
  1567.  
  1568.  Returns the value of the specified option in the current 
  1569.  graphics state. The numerical value for single valued 
  1570.  elements is returned by the function otherwise the return
  1571.  value is 0. A text representation of the value is optionally 
  1572.  returned in str. If used, be sure to allocate a character 
  1573.  array with sufficient space for str before calling this 
  1574.  function as in char str[80]; at the top of the program. The 
  1575.  valid option values are defined in splot.h. See also set() 
  1576.  for a description of the various options. The returned 
  1577.  string can be printed using the command puts(str); in the 
  1578.  program where "str" is the name of the array in the call to 
  1579.  get(). Returned numerical values can be printed using 
  1580.  print(value); The second array parameter is optional and is 
  1581.  only really needed for getting options that are more than 
  1582.  just a single value such as line patterns.
  1583.  
  1584. <grestore>
  1585.  void grestore(); 
  1586.   
  1587.  Pops a graphics state off the state stack thereby restoring 
  1588.  the graphics state that was in effect at the time the 
  1589.  matching gsave() was executed. In particular, the path, the 
  1590.  clip path, the line styles, line colours etc. are restored 
  1591.  to their previous values. 
  1592.   
  1593. <gsave>
  1594.  void gsave(); 
  1595.  
  1596.  Pushes the current graphics state onto the state stack. The 
  1597.  current path, clip path, line style, colour etc. are saved 
  1598.  so that they can be restored later using a grestore() 
  1599.  command. 
  1600.   
  1601. <label>
  1602.  void label(int axis, char *label); 
  1603.  
  1604.  Add labels to the axes box previously defined. The first
  1605.  parameter is which axis to label either BOTTOM, TOP, LEFT
  1606.  or RIGHT. The following parameter is the label to be
  1607.  printed. The label will be printed centered between the
  1608.  appropriate edges of the current axes box. An error is
  1609.  generated if there is no current axes box. All labels
  1610.  should be after plotdata() if used otherwise spacing from
  1611.  the axes may not be correct. The spacing can also be 
  1612.  changed using set(LABELMARG,...);. label() is implicitly 
  1613.  stroked. 
  1614.  
  1615.   
  1616.   
  1617. <lineto>
  1618.  void lineto(double x,double y,...); 
  1619.  or
  1620.  void lineto(double *array,int first,int last);
  1621.  or
  1622.  void lineto(double *array);
  1623.   
  1624.  Adds a line segment to the current path from the current 
  1625.  point to (x,y). More than one coordinate point can be 
  1626.  specified in the command in which case a series of line 
  1627.  segments connecting the points will be added to the current 
  1628.  path. If there is no current point then an error will be 
  1629.  generated. Several formats are allowed. The first is a list 
  1630.  of coordinate pairs. The second format is a pointer to a 2D 
  1631.  array of coordinate pairs followed by an optional pair of 
  1632.  integers specifying the first and last pairs to be plotted. 
  1633.   
  1634. <moveto>
  1635.  void moveto(double x, double y); 
  1636.   
  1637.  Sets the current point to (x,y). Also sets the path close 
  1638.  point to (x,y) for subsequent use with closepath(). Many 
  1639.  path building commands such as curveto() and lineto() require 
  1640.  that a current point exist before calling them. 
  1641.   
  1642. <newpath>
  1643.  void newpath(); 
  1644.   
  1645.  Resets the current path to NULL and also causes the current
  1646.  point to be undefined. Furthermore, it turns off the 
  1647.  implicit stroking of elements that are normally implicitly 
  1648.  stroked such as text();. Thus using newpath(); these 
  1649.  elements can be added to a path which must then be 
  1650.  explicitly stroked. stroke() turns on implicit stroking 
  1651.  again.
  1652.   
  1653. <plotdata>
  1654.  void plotdata(double *data, int xcol, int ycol,...);
  1655.  
  1656.  Plots the data found in array data in a box. This command
  1657.  chooses the scale sizes tick marks etc. to display the data
  1658.  which is assumed to be in order of monotonically increasing
  1659.  or decreasing x value order. The parameters xcol and ycol
  1660.  specify which columns of the array data to use for the x
  1661.  and y values respectively. The xcol and ycol params are
  1662.  optional. If no values are given then xcol = 0 and ycol = 1
  1663.  are assumed. For the popular case of one column of x values
  1664.  and a set of y values the whole set may be plotted using
  1665.  plotdata(data,xcol,ALL_Y);. If the default choices of
  1666.  plotdata are not acceptable a plot can be generated using
  1667.  the step by step method using axes_box(), tickmarks(),
  1668.  ticklabels() and drawdata(). The data must first be read in
  1669.  to array data using readdata(). plotdata() is implicitly
  1670.  stroked. More than one data, xcol, ycol triplet may be
  1671.  entered in which case the auto scaling ensures that the box
  1672.  is scaled to the max of all the data sets.
  1673.   
  1674. <rarrowto>
  1675.  void rarrowto(double x, double y,...); 
  1676.   
  1677.  Adds a line segment to the current path from the current 
  1678.  point to the current point plus x, y. The line is 
  1679.  terminated by drawing an arrow head oriented in the 
  1680.  direction of the line. This command is identical to arrowto 
  1681.  except that the displacement is specified relative to the 
  1682.  current point. More than one coordinate point can be 
  1683.  specified in the command in which case a series of line 
  1684.  segments terminated by arrows connecting the points will be 
  1685.  added to the current path. If there is no current point 
  1686.  then an error will be generated. The size of the arrow 
  1687.  head may be changed with the set(FONTWIDTH,...); command.
  1688.  
  1689. <readdata>
  1690.  void readdata(char * filename, double * data, int mod);
  1691.  
  1692.  Reads a file of name filename and puts the data into the
  1693.  array "data". The file should be in ASCII format with the x
  1694.  data in one column and the y data values next column(s).
  1695.  Any line containing non numeric characters or is blank will
  1696.  be considered a comment and ignored. WARNING! As an
  1697.  optimization data is only read from disk once if the
  1698.  configuration parameter always_load is off. Subsequent
  1699.  executions use the stored data already in memory (except
  1700.  after a reset). This means that if you modify the array
  1701.  "data" after reading in values the next time the file is
  1702.  executed you will get strange results. Similarly, if you
  1703.  reuse the same array for different plots in the same
  1704.  drawing you will have trouble. The motto is never change
  1705.  the values in the array "data". If you want to change the
  1706.  values declare another array and copy the values. Also
  1707.  remember that readdata() implicitly allocates memory for
  1708.  the data array so it is correct to declare the data array
  1709.  as double *data; at the top. If however, you are going to
  1710.  fill in a new array with calculated values you need to
  1711.  declare the array as double newdata[ysize][xsize]; so that
  1712.  space will be allocated. The last parameter is optional
  1713.  and if included and non-zero the data is read in as a
  1714.  single dimension array. Furthermore, x values are not
  1715.  generated if there is just a single column of numbers in
  1716.  the file. This modified form of readdata is useful for
  1717.  reading in numbers into an array to be used in lineto()
  1718.  etc.
  1719.  
  1720. <rcurveto>
  1721.  void rcurveto(double x1, double y1, double x2, double y2, 
  1722.           double x3, double y3); 
  1723.  or
  1724.  void rcurveto(double *array,int first,int last);
  1725.  or
  1726.  void rcurveto(double *array);
  1727.   
  1728.  This is identical to curveto() except that the list of
  1729.  coordinates are all relative distances from previous point.
  1730.  Adds Bezier curve sections to the current path starting 
  1731.  at the current point. The curve starts tangent to 
  1732.  (xcur,ycur) - (x1,x2) and ends tangential to (x2,y2) - 
  1733.  (x3,y3) at (x3,y3); An error is generated if there is no 
  1734.  current point. The number of coordinate points must be 
  1735.  a multiple of three else an error is generated.
  1736.  Several formats are allowed. The first is a list 
  1737.  of coordinate pairs. The second format is a pointer to a 2D 
  1738.  array of coordinate pairs followed by an optional pair of 
  1739.  integers specifying the first and last pairs to be plotted. 
  1740.   
  1741. <reset>
  1742.  void reset(); 
  1743.   
  1744.  Restores all set able parameters to their default values. 
  1745.  Clears the current path and clip path. 
  1746.   
  1747. <rlineto>
  1748.  void rlineto(double x,double y,...); 
  1749.  or
  1750.  void rlineto(double *array,int first,int last);
  1751.  or
  1752.  void rlineto(double *array);
  1753.   
  1754.  Adds a line segment to the current path from the current 
  1755.  point to the current point plus x, y. This command is 
  1756.  identical to lineto except that the displacement is 
  1757.  specified relative to the current point. More than one 
  1758.  coordinate point can be specified in the command in which 
  1759.  case a series of line segments connecting the points will 
  1760.  be added to the current path. If there is no current point 
  1761.  then an error will be generated. Several formats 
  1762.  are allowed. The first is a list of coordinate pairs. The
  1763.  second format is a pointer to a 2D array of coordinate
  1764.  pairs followed by an optional pair of integers specifying 
  1765.  the first and last pairs to be plotted.
  1766.   
  1767. <rmoveto>
  1768.  void rmoveto(double x, double y); 
  1769.   
  1770.  Sets the current point to the current point plus x,y. This 
  1771.  command is the same as moveto except that a relative move 
  1772.  is specified. It also sets the path close point for 
  1773.  subsequent use with closepath(). Many path building 
  1774.  commands such as curveto and lineto require that a current 
  1775.  point exist before calling them. 
  1776.   
  1777. <rotate>
  1778.  void rotate(double ang); 
  1779.   
  1780.  Rotates the figure about the
  1781.  current origin by the the angle 
  1782.  specified. The angle units are
  1783.  degrees and the +ve direction
  1784.  is counterclockwise.  
  1785.  Changes in rotation are cumulative.
  1786.  
  1787. <rsplineto>
  1788.  void rsplineto(double x1,y1,x2,y2,...);
  1789.  or
  1790.  void rsplineto(double *array,int first,int last);
  1791.  or
  1792.  void rsplineto(double *array);
  1793.  
  1794.  This is identical to splineto() except that the list of
  1795.  coordinates are all relative distances from previous point.
  1796.  This function accepts a list of two or more coordinate 
  1797.  pairs and using the current point as the first point draws 
  1798.  a cubic spline which goes through all of the given 
  1799.  coordinates. It uses Bezier curves internally but 
  1800.  calculates the necessary control points in order to make 
  1801.  the derivative continous everywhere. An error is generated 
  1802.  if there is no current point. Specifying less than two 
  1803.  additional points also generates an error. Several formats 
  1804.  are allowed. The first is a list of coordinate pairs. The
  1805.  second format is a pointer to a 2D array of coordinate
  1806.  pairs followed by an optional pair of integers specifying 
  1807.  the first and last pairs to be plotted.
  1808.   
  1809. <scale>
  1810.  void scale(double xs, double ys); 
  1811.   
  1812.  Changes the scale of the figure
  1813.  by the factors specified for
  1814.  the x and y axes respectively.
  1815.  Changes in scale are cumulative.
  1816.   
  1817. <set>
  1818.  void set(int option, ...); 
  1819.   
  1820.  All set able parameters can be set using the set command. 
  1821.  The first parameter specifies which option to set. The 
  1822.  defined constants corresponding to valid options are 
  1823.  defined in the header file splot.h. What follows is a very 
  1824.  brief description of all the values set able using set(). 
  1825.  
  1826.  set(AXESCLIP,val);
  1827.  If val is ON then the data values are clipped to the limits 
  1828.  of the axes box. This is temporarily added to the user set 
  1829.  clip limits if any. If val is OFF (the default) then the 
  1830.  user specified clip limits from the last clip() call are 
  1831.  used. 
  1832.  Alternatively the range of data values plotted can be set
  1833.  using set(XRANGE,...); set(YRANGE,...); .
  1834.  
  1835.  set(AXESTYPE,val); 
  1836.  AXESTYPE may be one of the following. LINEAR (the default), 
  1837.  LOGX, LOGY, LOGLOG, INVX, INVY, INVINV, INVXLOGY or 
  1838.  LOGXINVY. The position of data points and tickmarks are 
  1839.  automatically adjusted to account for the axes type. 
  1840.  
  1841.  set(CURSYMBOL,sym);
  1842.  Sets the symbol to use when plotting data with symbols. sym 
  1843.  must be one of OCIRCLE,OSQUARE,OTRIANGLE,ODIAMOND 
  1844.  OSTAR,OARROW,PLUS,CROSS,MULT,CIRCLE,SQUARE,TRIANGLE, 
  1845.  DIAMOND,STAR,or ARROW. The default symbol is CIRCLE. The 
  1846.  size of a symbol can be changed using set(FONTWIDTH, 
  1847.  val_in_cm); since symbols are just a special font. 
  1848.  The size of a symbol can be changed using set(FONTWIDTH,
  1849.  val_in_cm); since symbols are just a special font. The 
  1850.  size relative to the current FONTWIDTH can be set using 
  1851.  set(SYMMULT,mult);. 
  1852.  
  1853.  set(FILLRULE,type);
  1854.  Determines the rule to be used when filling a path. Type 
  1855.  must be one of NONZWIND (default) or EVENODD. 
  1856.  
  1857.  set(FLATNESS,num);
  1858.  Sets the maximum allowable error in pixels when converting 
  1859.  a curve to a set of straight line segments. Smaller values 
  1860.  of num give smother curves but take longer to process. The 
  1861.  default value of num is 1.
  1862.   
  1863.  set(FONT,fonttype);
  1864.  Sets the font type to use for subsequent text written using 
  1865.  the text(); routine. fontname type be either SIMPLEX 
  1866.  (default) or COMPLEX. 
  1867.   
  1868.  set(FONTASPECT,asp);
  1869.  Sets the ratio of the glyph height to width used for text 
  1870.  written using text();. The default value is 2.0 
  1871.   
  1872.  set(FONTDIR,angle);
  1873.  Sets the rotation angle with respect to the x axis to use 
  1874.  when writing text using text(); The default is 0. 
  1875.   
  1876.  set(FONTMULT,factor);
  1877.  Multiplies the current font size by the given factor. 
  1878.   
  1879.  set(FONTWIDTH,wid);
  1880.  Sets the average width of the characters written using 
  1881.  text(). The default value is 0.7 cm. FONTWIDTH applies also 
  1882.  to symbols. 
  1883.  
  1884.  set(LABELMARG,val);
  1885.  Sets the additional margin between the axes box and the 
  1886.  labels. The default is 0.0 cm. 
  1887.   
  1888.  set(LINECAP,type);
  1889.  Determines how thick lines are to be terminated. The 
  1890.  allowed types are BUTTCAP (default), ROUNDCAP and PROJCAP. 
  1891.   
  1892.  set(LINECOLOUR,col); 
  1893.  Where col is one of INVIS, BLACK, BLUE, GREEN, CYAN, RED, 
  1894.  MAGENTA, BROWN or WHITE. This set the colour to use when 
  1895.  the current path is stroked or filled. The default colour 
  1896.  is BLACK with the background WHITE. 
  1897.  
  1898.  set(LINEJOIN,type);
  1899.  Determines how thick lines are joined together. The allowed 
  1900.  join types are MITERJOIN (default), BEVELJOIN and 
  1901.  ROUNDJOIN. 
  1902.  
  1903.  set(LINESTYLE,pattern,...);
  1904.  Sets the line style to use for the path when it is stroked. 
  1905.  The constant LINESTYLE is followed by a list of floating 
  1906.  point values that define the pattern. The values are 
  1907.  interpreted as the length along the path that the line is 
  1908.  visible followed by the length that it is invisible as an 
  1909.  alternating sequence wrapping back to the beginning when 
  1910.  the pattern reaches the end. For example a pattern of 
  1911.  1.0,1.0 implies on for 1 cm followed by off for 1 cm. A 
  1912.  pattern of 1.0,0.5 is on for 1 cm followed by off for 0.5 
  1913.  cm. The predefined patterns are: SOLID 0 (default) DASHED 
  1914.  1.0,0.5 DOTTED 0.2,0.2 and DOTDASH 1.0,0.5,0.2,0.5. There
  1915.  must always be an even number of comma separated values
  1916.  in a pattern definition.
  1917.   
  1918.  set(LINEWIDTH,width);
  1919.  Sets the line width to width cm (default 0.05 cm). This 
  1920.  line width is used when the current path is stroked. 
  1921.   
  1922.  set(MITERLIMIT,maxratio);
  1923.  Sets the maximum length of spikes formed by miter joining 
  1924.  two lines at an acute angle. If the ratio of the length of 
  1925.  the spike to the width exceeds the value of maxratio then a 
  1926.  BEVELJOIN is done instead. The default value is 10.0. 
  1927.  
  1928.  set(PAGEROT,flag);
  1929.  Selects landscape orientation if flag is ON. 
  1930.  Default is portrait.
  1931.  
  1932.  set(PATTOFF,offset);
  1933.  Sets the offset into the current LINESTYLE pattern. Can be
  1934.  used to adjust the starting point of a pattern for aesthetic
  1935.  reasons.
  1936.   
  1937.  set(PLOTTYPE,type);
  1938.  Sets the current plot type. type must be one of LINES 
  1939.  (default), SYMBOLS or SYM_LINES. LINES connects data points 
  1940.  with line segments while SYMBOLS causes the current symbol 
  1941.  to be drawn at each data point. SYM_LINES does both. 
  1942.  The size of a symbol can be changed using set(FONTWIDTH, 
  1943.  val_in_cm); since symbols are just a special font. The size 
  1944.  relative to the current FONTWIDTH can be set using 
  1945.  set(SYMMULT,mult);. 
  1946.   
  1947.  set(SCALEALL,val);
  1948.  If val is ON then the XSHIFT, YSHIFT, XMULT, YMULT values 
  1949.  are applied to all coordinates (i.e. in lineto, moveto etc.). 
  1950.  The default is OFF in which case only data plotted using 
  1951.  plotdata or drawdata is affected by these values. 
  1952.  
  1953.  
  1954.  set(SCRIPTSCALE,val);
  1955.  Sets the relative height of a super/sub script as compared 
  1956.  to ordinary text. The default value is 0.5. 
  1957.  
  1958.  set(SCRIPTSHIFT,val);
  1959.  Sets the distance that a super/sub script is shifted 
  1960.  above/below ordinary text. The value is specified as a 
  1961.  fraction of the ordinary text height. The default value is 
  1962.  0.7. 
  1963.  
  1964.  set(SYMMULT,val)
  1965.  Sets the symbol size multiplier used when drawing symbols. 
  1966.  The default value is 1.0. The actual symbol size is 
  1967.  determined the current FONTWIDTH multiplied by the curent 
  1968.  SYMMULT value.
  1969.  
  1970.  set(TICKLENGTH,len);
  1971.  Sets the length of axis tick marks to be used. The default 
  1972.  value is 0.3 cm. 
  1973.  
  1974.  set(TICKLMARG,len);
  1975.  Sets the margin between the axes box and the tick labels. 
  1976.  The default is 0.0 cm. 
  1977.   
  1978.  set(XMULT,xmul);
  1979.  Causes each x value to be multiplied by xmul before being 
  1980.  plotted. 
  1981.   
  1982.  set(XRANGE,xmin,ymin);
  1983.  data plotted using drawdata is constrained to have x 
  1984.  values between xmin and xmax. There is also a corresponding 
  1985.  YRANGE set option. The default is no constraints. The 
  1986.  values should be specified in user coordinates i.e. those 
  1987.  established by the current axes_box() or ascale(). 
  1988.  
  1989.  set(XSHIFT,xshft);
  1990.  Causes the value xshft to be added to all x values before 
  1991.  plotting. 
  1992.   
  1993.  set(YMULT,ymul);
  1994.  Causes each y value to be multiplied by ymul before being 
  1995.  plotted. 
  1996.  
  1997.  set(YSHIFT,yshft);
  1998.  Causes the value yshft to be added to all y values before 
  1999.  plotting. 
  2000.   
  2001.  
  2002. <showpage>
  2003.  void showpage();
  2004.   
  2005.  Transfers the marked page created in memory by the stroke 
  2006.  and fill commands to the physical page. This is 
  2007.  automatically done at the end of the file and thus this
  2008.  command is only needed if it is desirable to draw parts
  2009.  of the figure before the end of execution.
  2010.  
  2011. <smooth>
  2012.  void smooth(double *data,int col, int pnts,char wrap)
  2013.  
  2014.  Does a pnts point smooth on the specified column of
  2015.  the data array. The last parameter specifies that the
  2016.  data is cyclical and that to smooth the endpoints the
  2017.  algorithm should wrap around back to the beginning or
  2018.  end. The last two parameters are optional and are set
  2019.  to 5 and FALSE by default.
  2020.  
  2021. <splineto>
  2022.  void splineto(double x1,y1,x2,y2,...);
  2023.  or
  2024.  void splineto(double *array,int first,int last);
  2025.  or
  2026.  void splineto(double *array);
  2027.  
  2028.  This function accepts a list of two or more coordinate 
  2029.  pairs and using the current point as the first point draws 
  2030.  a cubic spline which goes through all of the given 
  2031.  coordinates. It uses Bezier curves internally but 
  2032.  calculates the necessary control points in order to make 
  2033.  the derivative continous everywhere. An error is generated 
  2034.  if there is no current point. Specifying less than two 
  2035.  additional points also generates an error. Several formats 
  2036.  are allowed. The first is a list of coordinate pairs. The
  2037.  second format is a pointer to a 2D array of coordinate
  2038.  pairs followed by an optional pair of integers specifying 
  2039.  the first and last pairs to be plotted.
  2040.  
  2041. <stroke>
  2042.  void stroke(); 
  2043.   
  2044.  Marks the page in memory with the current path. The path 
  2045.  coordinates are transformed using the current coordinate 
  2046.  transformation matrix and the path is fleshed out using the 
  2047.  current line width, style and colour in effect at the time 
  2048.  of the stroke command. 
  2049.   
  2050. <symbol>
  2051.  void symbol(double x, double y, int symbol_const); 
  2052.  or
  2053.  void symbol(int symbol_const); 
  2054.  
  2055.  Plots the symbol chosen by symbol_const at the point x,y. 
  2056.  symbol_const must be one of OCIRCLE, OSQUARE, OTRIANGLE, 
  2057.  ODIAMOND OSTAR, OARROW, PLUS, CROSS, MULT, CIRCLE, SQUARE, 
  2058.  TRIANGLE, DIAMOND, STAR,or ARROW. If the point x,y is 
  2059.  omitted the symbol is drawn at the current point as set 
  2060.  by a previous moveto();. symbol() is not implicitly 
  2061.  stroked so follow with a stroke();. The size of a symbol 
  2062.  can be changed using set(FONTWIDTH, val_in_cm); since 
  2063.  symbols are just a special font. The size relative to the 
  2064.  current FONTWIDTH can be set using set(SYMMULT,mult);. 
  2065.  
  2066. <text>
  2067.  void text(double x, double y, char * str,int just); 
  2068.   
  2069.  Adds the text string str to the current path starting at 
  2070.  location (x,y). The current font, size and orientation as 
  2071.  set using the set() command are used. Super/sub scripts can 
  2072.  be entered as ^2^ and _2_ respectively. Letters surrounded 
  2073.  by '!' or '#' are printed in Greek or italics respectively. 
  2074.  For example !m! generates the Greek lower case mu. The 
  2075.  special characters "^_!#$\" can be printed by preceding them 
  2076.  with \ as in \!. The combination \b back spaces by one 
  2077.  character. Symbols may be included in the text string by 
  2078.  enclosing them with $ as in $3$.
  2079.  If the starting x,y coordinates are omitted then 
  2080.  the current string is positioned one line below the 
  2081.  previous string added to the path using text(). The last 
  2082.  parameter is the justification and must be one of LEFT, 
  2083.  RIGHT or CENTER. This last parameter can be omitted in 
  2084.  which case the default value of LEFT will be used. text() 
  2085.  is implicitly stroked.
  2086.   
  2087. <ticklabel>
  2088.  void ticklabel(int axis, double v, char *label,...); 
  2089.   
  2090.  Add tick labels to the axes box previously defined. The 
  2091.  first parameter is which axis to label either BOTTOM, TOP, 
  2092.  LEFT or RIGHT. The following parameters are paired values 
  2093.  giving the tick position in data coordinates as established 
  2094.  by a prior call to axes_box() or ascale() and the text 
  2095.  string to be placed at that location. An error is generated 
  2096.  if there is no current axes_box. There are several default 
  2097.  possibilities. If 'ticklabel();' is called without any 
  2098.  parameters then if tick marks have been generated 
  2099.  previously using 'tickmarks();' then they will be 
  2100.  selectively labelled along the left and bottom axes. If 
  2101.  only an axis parameter is given then the corresponding axis 
  2102.  tick marks if any will be labelled. If the axis parameter 
  2103.  is followed by a list of numbers only they will be 
  2104.  assumed to be both the tick position and the desired label. 
  2105.  If the numbers are paired with strings in the parameter 
  2106.  list then the number will be used as the tick label 
  2107.  position and the string will be used as the literal label. 
  2108.  The spacing between the tick labels and the axes box can be 
  2109.  changed using set(TICKLMARG,...); ticklabel() is implicitly 
  2110.  stroked.
  2111.   
  2112. <tickmarks>
  2113.  void tickmarks(int axis, double v,...); 
  2114.   
  2115.  Add tick marks to the axes box previously defined. The 
  2116.  first parameter is which axis either BOTTOM , TOP, LEFT, 
  2117.  RIGHT ,XAXES or YAXES. The following numbers are the 
  2118.  positions were tickmarks are to to be placed. The length of 
  2119.  the ticks is set using a set(TICKLENGTH,val) command. The 
  2120.  tickmarks will be drawn using the current linestyle and 
  2121.  colour. The location of the ticks is specified in data 
  2122.  coordinates as established by the prior call to axes_box(). 
  2123.  An error is generated if there is no current axes_box. All 
  2124.  the above parameters are optional. The default behaviour is 
  2125.  as follows. If all parameters are omitted tick marks will 
  2126.  be automatically generated for all axes. If only an axis 
  2127.  specifier is given then tick marks will be generated for 
  2128.  the corresponding axis or axes. In these cases 
  2129.  'tickmarks();' will try to find reasonable positions for a 
  2130.  set of tick marks. If this default behaviour is 
  2131.  unacceptable then the actual tick positions can be 
  2132.  specified as a list of values following the axis specifier. 
  2133.  If there is only one numeric value it is interpreted as a 
  2134.  tick spacing. tickmarks() is implicitly stroked. 
  2135.   
  2136. <translate>
  2137.  void translate(double tx, double ty);
  2138.   
  2139.  Translates the origin of the 
  2140.  figure by the x and y distances
  2141.  specified. Translations are 
  2142.  cumulative.
  2143.  
  2144. <whereis>
  2145.  void whereis(double *x,double *y); 
  2146.  
  2147.  Returns the coordinates of the current point as set by the 
  2148.  last moveto(), lineto() etc.
  2149.  
  2150. <break>
  2151.  C keyword
  2152.  
  2153.  Used to prematurely terminate a loop;
  2154.  
  2155.  Example:
  2156.  
  2157.  for (i = 0;i< 100; i++)
  2158.     {
  2159.     if (cond == 1) break;
  2160.     /* if cond == 1 break out of the
  2161.     loop regardless of the value of
  2162.     i and continue at end of loop. */
  2163.     }
  2164.  
  2165. <case>
  2166.  C keyword
  2167.  
  2168.  Used in conjunction with a switch to select one of a set of 
  2169.  choices.
  2170.  
  2171.  Example:
  2172.     
  2173.   switch(code)
  2174.      {
  2175.      case 0:/* do something if code = 0*/
  2176.         break;
  2177.      case 1:/* do this if code = 1*/
  2178.         break;   
  2179.      case 2:
  2180.      case 3:/* do this if code = 1 or 2*/
  2181.         break;
  2182.      default:/* do this if none of the
  2183.            above */
  2184.        break;
  2185.      }
  2186.  
  2187. <char>
  2188.  C keyword
  2189.  
  2190.  Used to allocate memory for a variable of size one byte. 
  2191.  All chars are between -128 and 127. All variable
  2192.  declarations must be done outside of the main routine for
  2193.  of the main routine for globals. Unlike standard C and more
  2194.  like C++ local variable declarations for local variables
  2195.  can be anywhere in the routine. Also specifying the size
  2196.  of local arrays using variables rather than constants is
  2197.  acceptable for the interperter.
  2198.  
  2199.  Example:
  2200.  
  2201.   char c;
  2202.  
  2203.  Arrays of base types can be specified using the syntax:
  2204.  
  2205.   char tmp[80];
  2206.  
  2207.  Pointers to a base type are specified as 
  2208.  
  2209.   char *tp;
  2210.  
  2211. <continue>
  2212.  C keyword
  2213.  
  2214.  Used to skip the remainder of a loop and test the condition 
  2215.  again. 
  2216.  
  2217.  Example:
  2218.  
  2219.  for (i = 0;i< 100; i++)
  2220.     {
  2221.     if (cond == 1) continue;
  2222.     /* if not cond == 1 do the rest
  2223.     of the loop below the above line
  2224.     otherwise increment i and test
  2225.     again. */
  2226.     }
  2227.  
  2228.  
  2229. <default>
  2230.  C keyword
  2231.  
  2232.  Used in conjunction with a switch to select the remaining
  2233.  not explicitly specified choices.
  2234.  
  2235.  Example:
  2236.  
  2237.  switch(code)
  2238.     {
  2239.     case 0:/* do something if code = 0*/
  2240.        break;
  2241.     case 1:/* do this if code = 1*/
  2242.        break;
  2243.     case 2:
  2244.     case 3:/* do this if code = 1 or 2*/
  2245.        break;
  2246.     default:/* do this if none of the
  2247.            above */
  2248.        break;
  2249.     }
  2250.  
  2251. <do>
  2252.  C keyword
  2253.  
  2254.  Used in conjunction with while to set up loops that are
  2255.  executed at least once. For Example:
  2256.  
  2257.  do
  2258.     {
  2259.     /* loop body */
  2260.     }
  2261.  while (cond ==  1);
  2262.  
  2263. <double>
  2264.  C keyword
  2265.  
  2266.  Used to allocate memory for a double precision floating
  2267.  point value. All variable declarations must be done outside
  2268.  of the main routine for globals. Unlike standard C and more
  2269.  like C++ local variable declarations for local variables
  2270.  can be anywhere in the routine. Also specifying the size
  2271.  of local arrays using variables rather than constants is
  2272.  acceptable for the interperter.
  2273.  
  2274.  Example:
  2275.  
  2276.  double d;
  2277.  
  2278.  Arrays of base types can be specified using the syntax (2 x
  2279.  400 array):
  2280.  
  2281.  double data[2][400];
  2282.  
  2283.  Pointers to a base type are specified as
  2284.  
  2285.  double *tp;
  2286.  
  2287. <else>
  2288.  C keyword
  2289.  
  2290.  Used as part of an if statement to select the converse 
  2291.  case. Example 
  2292.  
  2293.  if (cond == 1)
  2294.     {
  2295.     /* execute this if cond = 1 */
  2296.     }
  2297.  else
  2298.     {
  2299.     /* execute this if cond not 1 */
  2300.     }
  2301.  
  2302. <float>
  2303.  C keyword
  2304.  
  2305.  Used to allocate memory for a single precision floating
  2306.  point value. All variable declarations must be done outside
  2307.  of the main routine for globals. Unlike standard C and more
  2308.  like C++ local variable declarations for local variables
  2309.  can be anywhere in the routine. Also specifying the size
  2310.  of local arrays using variables rather than constants is
  2311.  acceptable for the interperter.
  2312.  
  2313.  Example:
  2314.  
  2315.  float f;
  2316.  
  2317.  Arrays of base types can be specified using the syntax (2 x
  2318.  400 array):
  2319.  
  2320.  float data[2][400];
  2321.  
  2322.  Pointers to a base type are specified as:
  2323.  
  2324.  float *tp;
  2325.  
  2326. <for>
  2327.  C keyword
  2328.  
  2329.  Used to set up loops which are meant to run for a
  2330.  predetermined number of iterations. For example: 
  2331.  
  2332.  for (i = 0;i< 100; i = i + 2)
  2333.     {
  2334.     /* execute this loop body 50 
  2335.     times. i.e. until i = 100 with
  2336.     i starting at zero and incremented
  2337.     by 2 after each iteration */
  2338.     }
  2339.  
  2340. <int>
  2341.  C keyword
  2342.  
  2343.  Used to allocate memory for a variable of size one integer.
  2344.  All variable declarations must be done outside of the main
  2345.  of the main routine for globals. Unlike standard C and more
  2346.  like C++ local variable declarations for local variables
  2347.  can be anywhere in the routine. Also specifying the size
  2348.  of local arrays using variables rather than constants is
  2349.  acceptable for the interperter.
  2350.  
  2351.  Example:
  2352.  
  2353.  int i,j;
  2354.  
  2355.  Arrays of base types can be specified using the syntax (2 x
  2356.  400 array):
  2357.  
  2358.  int data[2][400];
  2359.  
  2360.  Pointers to a base type are specified
  2361.  as
  2362.  
  2363.  int *tp;
  2364.  
  2365. <if>
  2366.  C keyword
  2367.  
  2368.  Used to conditionally execute a block of code depending if 
  2369.  the conditional expression is true (non zero) or false
  2370.  (zero). Can be used in conjunction with the keyword else. 
  2371.  For example: 
  2372.  
  2373.  if (i > j && k != 10)
  2374.     {
  2375.     /* execute this block if i greater
  2376.     than j and k not equal to 10 */
  2377.     }
  2378.  else
  2379.     {
  2380.     /* otherwise to this block */
  2381.     }
  2382.  
  2383. <main>
  2384.  C keyword
  2385.  
  2386.  This is actually a function and is the starting point of 
  2387.  the code. The function main is called by hitting CTRL G. 
  2388.  The syntax is 
  2389.  
  2390.  main()
  2391.     {
  2392.     /* program to be executed */
  2393.     }
  2394.  
  2395. <return>
  2396.  C Keyword
  2397.  
  2398.  This exits a sub routine and returns an optional value to 
  2399.  the calling routine. For example: 
  2400.  
  2401.  main()
  2402.     {
  2403.     int x;
  2404.     i = sub(x);
  2405.     print(i);
  2406.     }
  2407.  
  2408.  int sub(int x)
  2409.     {
  2410.     /* calculate i based on input x */
  2411.     return i;
  2412.     }
  2413.  
  2414. <short>
  2415.  C keyword
  2416.  
  2417.  Used to allocate memory for a variable of size one small
  2418.  integer. All variable declarations must be done outside of
  2419.  the main of the main routine for globals. Unlike standard
  2420.  C and more like C++ local variable declarations for local
  2421.  variables can be anywhere in the routine. Also specifying
  2422.  the size of local arrays using variables rather than
  2423.  constants is acceptable for the interperter.
  2424.  
  2425.  Example:
  2426.  short i,j;
  2427.  
  2428.  Arrays of base types can be specified using the syntax (2 x
  2429.  400 array):
  2430.  
  2431.  short data[2][400];
  2432.  
  2433.  Pointers to a base type are specified as
  2434.  
  2435.  short *tp;
  2436.  
  2437. <switch>
  2438.  C keyword
  2439.  
  2440.  Used to select one of a number of choices based on the
  2441.  value of the expression code.
  2442.  
  2443.  Example:
  2444.  
  2445.  switch(code)
  2446.     {
  2447.     case 0:/* do something if code = 0*/
  2448.        break;
  2449.     case 1:/* do this if code = 1*/
  2450.        break;   
  2451.     case 2:
  2452.     case 3:/* do this if code = 1 or 2*/
  2453.        break;
  2454.     default:/* do this if none of the
  2455.            above */ 
  2456.        break;
  2457.     }
  2458.  
  2459. <unsigned>
  2460.  C keyword
  2461.  
  2462.  Used as a type modifier for the integer variable types
  2463.  char, short, and int.
  2464.  
  2465.  example
  2466.  
  2467.  unsigned int ui;
  2468.  
  2469. <while>
  2470.  C keyword
  2471.  
  2472.  Used to construct loops which run an non predetermined
  2473.  number of times. For example:
  2474.  
  2475.  cond = 1;
  2476.  while (code == 1)
  2477.     {
  2478.     /* execute this loop body until
  2479.     something in here sets cond to 
  2480.     something other than 1. */
  2481.     }
  2482.  
  2483.